package chapter5.lessons.udpDemo01;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * @Project ：learn_java
 * @File ：ReceiveMessageDemo01.java
 * @IDE ：IntelliJ IDEA
 * @Author ：自由如风间
 * @Date ：2025/3/12 17:33
 * @Description ：接收发送端传来的消息
 */

public class ReceiveMessageDemo01 {
    public static void main(String[] args) throws IOException {

        int pt = 10086;

        // 接收的时候一定要绑定端口，且要与发送使用的端口保持一致
        DatagramSocket ds = new DatagramSocket(pt);

        // 接收数据
        byte[] bytes = new byte[1024];

        DatagramPacket dp = new DatagramPacket(bytes, bytes.length);

        // 该方法是阻塞的，即一直等
        ds.receive(dp);

        // 解析数据包
        byte[] data = dp.getData();
        int length = dp.getLength();
        InetAddress address = dp.getAddress();
        int port = dp.getPort();

        // System.out.println("接收到的数据是：" + new String(data));
        // 指定长度，不然会输出其他未存储数据位置的乱码
        System.out.println("接收到的数据是：" + new String(data, 0, length));

        // 解放资源
        ds.close();
    }
}
